package com.itheima.health.util;

import org.mindrot.jbcrypt.BCrypt;
import org.springframework.util.DigestUtils;

/**
 * @author 程达
 * @PackageName:com.itheima.health.util
 * @ClassName:PasswordUtils
 * @Description:
 * @date 2022/6/9 18:47
 **/
//密码判断工具类抽取思想
//参数：两个  前端传过来的参数，后端数据库里面的加密后的密码
//返回值：  要么正确，要么失败 boolean
public class PasswordUtils {
    public static boolean checkPassword(String password,String dbPassword){
        if(dbPassword.startsWith("{md5}")){//1.判断是不是以{md5}开头，是根据用户名去表中查询到密码字段
            // 2.如果是Md5密码 把前端的密码进行md5加密
            String mdPassword = DigestUtils.md5DigestAsHex(password.getBytes());
            //3.把数据库中的"{md5}替换成”“，也就是去掉，然后去和前端加密后的密码来比较。返回比较结果
            return mdPassword.equals(dbPassword.replace("{md5}",""));
        } else if(dbPassword.startsWith("{bcrypt}")){//4.判断是不是以{bcrypt}开头
            // 5.如果是bcrypt加密 调用BCrypt.checkpw 解密，同理，数据库的还是要去掉那个{bcrypt}再进行比较
            return BCrypt.checkpw(password,dbPassword.replace("{bcrypt}",""));//解密
        }
        // 6.如果没加密 返回比较结果
        return password.equals(dbPassword);
    }

    public static void main(String args[]){
        String password = "1234";//$2a$10$ofPkBDUezOJp6Sik63Q/0.QlU8a1itEyzldjSXqfn2nDPqXjN0Ljm
        String pwt = BCrypt.hashpw(password, BCrypt.gensalt()); // 加密
        System.out.println(pwt);
        boolean checkpw = BCrypt.checkpw(password, pwt);  // 解密
        System.out.println(checkpw);

    }
}